对象和类之间的概念
类和对象的关系可以理解为是抽象和具体的关系。举个最简单的例子:
“男的没一个好东西”这句话里的“男的”就可以想象为一个我们抽象出来的类,泛指所有男性。
而“某某某不是一个好东西”,这个时候就是特指了某一个具体的对象,这个对象就是这个类的一个实例
类(class)和对象(object)是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型。
它们的关系是,对象是类的实例,类是对象的模板。
假设我们想要生产一台电脑,我们就需要按照模板(类)来创建一台电脑(对象),那么这个时候我们不难看出,类就是对象的抽象
类:我们叫做class,对象:我们叫做object或者instance(实例)。
之后我们在说某个类的某个对象,或者某个对象是某个类的实例,这两个代表的就是同一个意思
百度百科对类和对象的解释:https://baike.baidu.com/item/类和对象/1394902
面向过程和面向对象区别
面向过程和面向对象都是对软件分析、设计和开发的一种思想,他指导着人们以不同的方式去分析、设计和开发软件
注意:面向过程和面向对象不是对立的关系,而是相辅相成的关系
我们在敲代码的时候既可能用到面向对象的思想,也有可能用到面向过程的思想
面向过程
,强调的是功能行为,以函数为最小单位,考虑怎么做。面向过程思想思考问题时,我们首先思考"怎么去按步骤实现?",并将步骤对应方法,一步一步,最终完成。
这个适合简单的任务,不需要过多协作的情况下
但是当我们思考比较复杂的问题时,且这个问题需要多方协作时,面向对象编程思想就诞生了
面向对象
,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做,更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。
面向对象分析方法分析问题的思路和步骤:
根据问题需要,选择问题所针对的现实世界中的实体
从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类。
把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义,即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构。
将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具
总结:
都是解决问题的思维方式,都是代码组织的方式。
解决简单问题可以使用面向过程
解决复杂问题:宏观上使用面向对象把握,微观处理上仍然是面向过程。
面向对象程序的设计方式
Alan Kay曾经总结了第一个成功的面向对象语言、同时也是Java所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了一种纯的面向对象程序设计方式:
万物皆为对象
。将对象视为奇特的变量,它可以存储数据,除此之外,你还可以要求它在自身上执行操作。理论上讲,你可以抽取待求解问题的任何概念化构件 (狗、建筑物、服务等),将其表示为程序中的对象。程序是对象的集合,它们通过发送消息来告知彼此所要做的
。要想请求一个对象,就必须对该对象发送一条消息。更具体地说,可以把消息想像为对某个特定对象的方法的调用请求每个对象都有自己的由其他对象所构成的存储
。换话说,可以通过创建包含现有对象的包的方式来创建新类型的对象。因此,可以在程序中构建复杂的体系,同时将其复杂性隐藏在对象的简单性背后。每个对象都拥有其类
。按照通用的说法,“每个对象都是某个类 (class)的一个实例(instance)”,这里“类”就是“类型”的同义词。每个类最重要的区别于其他类的特性就是可以发送什么样的消息给它”。某一特定类型的所有对象都可以接收同样的消息
。这是一意味深长的表述,你在稍后更会看到。因为“圆形”类型的对象同时也是“几何形”类型的对象,所以一个“圆形”对象必定能够接受发送给“几何形”对象的消息。这意味着可以编写与“几何形”交互并自动处理所有与几何形性质相关的事物的代码。这种可替代性 (substitutability)是OOP
中最强有力的概念之一
对象、对象进化史及企业管理制度
对象可以说是某类型的一个具体的示例,
或者说是他是为了保存数据而出现的,进而实现数据管理
再或者说是他就是在内存中的一个内存块,且这个内存块中有很多的数据
数据无管理时代
在计算机程序发展之初,是完全不需要对象的。因为有基本数据类型就够用了
而且一个程序只有几个变量就可以搞定,完全不涉及到数据管理这个问题
就好比说一个企业只有两个员工,两个人去把工作平均分配就好了,也不涉及到管理问题,大家闷头做事就可以了
数组管理时代 和 企业部门制
而随着计算机程序的发展,涉及到的变量也会越来越多。就好比一个公司的员工一样,这个时候我们最简单的处理办法就是归类(分部门)
而在我们的程序中,我们的想法就是将同一类别的数据放到一起。从而形成了今天的数组的概念
假设我们需要统计一些数据,比如某个班级所有同学的名字,如果我们使用基本数据类型的话,我们不难发现,每一个名字就要去对应一个变量
而这种归类的思想,就非常便于我们去管理数据
对象 和 企业项目制
在现实生活中,随着企业的不断发展,面对的场景也会更加复杂。一个项目可能需要经常协同多个部门才能完成工作。比如销售、谈判、调研、开发、测试和财务等等。
如果这个时候还是使用部门制的话,部门之间的协作和管理就会比较容易出问题。
这个时候就诞生了项目制。就拿腾讯的微信软件来说,腾讯专门为了微信成立了一个项目组,在这个项目组内有上千人在为这个项目提供服务,而且这些人不全都是程序员,比如这个项目组的财务部就是单独分开的,微信的支出以及收入都会由这个项目组的财务部进行核算。甚至是行政等部门也都是这样。他们的那一栋楼,也叫作“微信楼”。
一个完整的项目组和一个小型公司没有什么两样。然而事实上,现在有不少公司都是采用的项目制,比如华为,阿里等
对象和项目组之间的差别是,对象中是包含了不同类型的数据。二者之间的相同点在于,完全可以自定义,比如微信的项目组需要孵化子产品,则总公司可以直接给这个项目组配一个孵化组。对象需要一个新类型的变量,也可以直接添加上
同理,计算机编程继续发展,各种类型的变量更加多了,而且对数据的操作(指的就是方法,方法可以看做是对数据操作的管理)也复杂了,怎么办?
为了便于协作和管理,我们“将相关数据和相关方法封装到一个独立的实体”,于是“对象”产生了。比如,我们的一个学生对象︰
有属性(静态特征)︰年龄,姓名,学号
也可以有方法(动态行为):学习,吃饭,考试
ps:这种管理方式和集团去管理旗下公司差不多