面向对象的基本理论类和对象理论「面向对象的基本理论类和对象」
前面我们简单介绍了面向对象和面向过程的思维方式不同,简单理解就是面向过程方式主要关心的是流程化,而面向对象方式主要是找参与者,也就是找类,类是面向对象中最基本的概念,是面向对象分析OOA和面向对象设计OOD的基石,另一个基石是对象。
类和对象其实分不开的关系,就像鸡和蛋的关系,无法具体知道哪个先产生。只是我们设计类的时候先定义类,所以我们先介绍类的概念一、类
类是对象的模板,
我们先介绍基本的面向对象概念,具体的使用语法也就是定义的关键字后面会介绍 拉勾IT课小编为大家分解
前面我们简单介绍了面向对象和面向过程的思维方式不同,简单理解就是面向过程方式主要关心的是流程化,而面向对象方式主要是找参与者,也就是找类,类是面向对象中最基本的概念,是面向对象分析OOA和面向对象设计OOD的基石,另一个基石是对象。
类和对象其实分不开的关系,就像鸡和蛋的关系,无法具体知道哪个先产生。只是我们设计类的时候先定义类,所以我们先介绍类的概念
一、类类是对象的模板,但是什么对象呢?这个我们留个花絮,在介绍对象之前我们先给类一个通俗的定义吧!
那就是多个相似事物的通称,是不是还有点难理解,那我就一个词一个词的解释一下。
多个这个词容易理解,就是有很多事物;单个事物不能形成类;
相似代表有相同的特征,但是也有不同的地方,比如: 张继科和林丹,他俩必定有相同的特征,都有鼻子眼睛嘴等等。但是也有不同的地方,比如他俩的身高体重等不一定完全相同, 他俩还有各自的功能,张继科打乒乓球的,林丹打羽毛球的。
这就是我们说相似而不是相同;
通称也比较好理解,还拿张继科和林丹举例子,他俩都可以统称为人类,但是不能说统称为张继科,张继科那就是具体的人了。按照上面的理解知道什么是类了吧。奥迪和宝马是不是一类呢,他俩都属于车,所以就是一个车类。
再比如波音和空机都统称为飞机,所以就是一个飞机类。我们再想一个问题,飞机和车是不是一个类呢,它俩都有发动机,可以统称为交通工具。说到这就有答案了,飞机和车是一个交通工具类。
说到这你可能就想到了所有的事物最终都可以有大的统称。那为啥还分那么多类呢,就设计一个大类呗。这就失去了面向对象思想的一个好处,可扩展性,举一个例子,如果只设计一个交通工具类,原先的需求就有飞机和汽车。
某天需要添加个轮船类呢,就要修改类的结构。反之只需要添加轮船类就好。通过上面的介绍,都知道类到底是个啥,设计类的时候按照具体的需求就好,需求和观察角度不同,设计出来的类可能都不同。
比如:设计一个交通工具类和设计一个汽车类都不一样。
我们上面是拿文字大概介绍的,拿张继科和林丹举例子他俩都有静态特性,是一个名词,比如年龄、性别等等。也还有动态的功能,是一个动词,比如都能打球、训练等等。
张继科和林丹不是类,是具体的个体,所以就需要抽取共同的部分抽取成人类。
可是对应到面向对象中咋设计一个类呢,分别用属性和方法表示,属性就是指静态特性,方法就是指动态的功能;简单判断标准就是名词是属性,动词是方法。我们用一个程序看一下。
/** * 人类 */public class Person { //属性,人具有的特征 String name; //名字 int age; //年龄 float height; //身高 float weight; //体重 String gender; //性别 //方法,人具有的功能 //方法可以访问属性 public String getName() { return name; } public void playBall(){ System.out.println("打球!"); } public void train(){ System.out.println("训练!"); }} 上面的代码写出来我们并不能运行,一个类不能做事情,就比如一个人类能打球吗,显然不能,都是某个人能打球,所以我们需要一个类的实体来做事情。二、对象接下来我们该介绍什么是对象了,上面我们说过类是对象的模板,类都知道是什么了。对应的模板都知道是什么吧,一个使物体成固定型状的模具;
比如做蛋糕,你可以拿一个模具,然后把做好的面糊倒在里面放入入微波炉制作,制作完成之后模具中就有了一个具体的蛋糕。这个蛋糕和模具的形状基本就是相同的。
对应到面向对象思想中,这个做出来的每个蛋糕就是一个个对象,这每个蛋糕放在一起就是一个统称蛋糕,这其实就是一个蛋糕类。
蛋糕类是抽象的,也就是没有具体的实体,只是通过这个蛋糕模板可以知道大概的形状而已,通过微波炉制作的过程对应程序中就是实例化。
另外对象和类其实是相对的概念,上面谈过观察角度不同,类的设计不同,这样的话对应的对象也不同。比如以车作为参照标准来说,车是一个类,具体的奥迪就是一个车的对象,它是一个车的具体品牌。
ok说到这我们要说一下类和对象的联系:现实对象(归纳概括)--->现实类(抽象模拟)--->软件类(实例化)--->软件对象--->程序
现实类和对象就是我们现实世界能看到的东西吗,软件类和软件对象就是软件设计和运行中产生的
我们对上面的类进行一下实例化,创建具体的对象,先用图展示一下
/** * 创建一个张继科的对象 */public class TestPerson { public static void main(String[] args) { //先创建一个具体的空人,也就是空对象 Person person=new Person(); person.name="张继科"; //设置名字为张继科 person.play();//调用人类的方法,这个名字为张继科在打球 }}通过上面的介绍也就可以理解说:类是对象的抽象,对象是类的实例化了。那抽象是什么呢?抽象其实就是把像的部分抽取出来 ,而抽象的作用就是:隔离关注点,降低复杂度。就比如设计交通工具类,不划分类别的话,都集中在一起的话,那么我们的程序得多复杂凌乱。
类和对象的区别和关系是什么?
类和对象的关系是:类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
类与对象的关系就如模具和铸件的关系类的实例化结果就是对象,而对一类对象的抽象就是类,类描述了一组有相同属性和相同方法的对象。
如何理解面向对象程序设计中的类和对象
面向对象程序设计的基本概念:面向对象, 概括地说, 就是把问题抽象为对象, 设置属性(数据) , 指定事件或处理方式(代码) 来达到目的, 强调从问题域的概念到软件程序和界面的直接映射。面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。面向对象程序设计的基本特征1)对象:对象是运行期的基本实体,它是一个封装了数据和操作这些数据的代码的逻辑实体。2)类:类是具有相同类型的对象的抽象。一个对象所包含的所有数据和代码可以通过类来构造。3)封装性:封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。4)继承性:继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继承其它类的全部描述,同时可修改和扩充。继承具有传递性。继承分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。5)多态性:对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:Print消息被发送给一图或表时调用的打印方法与将同样的Print消息发送给一正文文件而调用的打印方法会完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。6)动态绑定
绑定指的是将一个过程调用与相应代码链接起来的行为。动态绑定是指与给定的过程调用相关联的代码只有在运行期才可知的一种绑定,它是多态实现的具体形式。7)消息传递:对象之间需要相互沟通,沟通的途径就是对象之间收发信息。消息内容包括接收消息的对象的标识,需要调用的函数的标识,以及必要的信息。消息传递的概念使得对现实世界的描述更容易。
面向对象语言
一个语言要称为面向对象语言必须支持几个主要面向对象的概念。根据支持程度的不同,通常所说的面向对象语言可以分成两类:基于对象的语言,面向对象的语言。
基于对象的语言仅支持类和对象,而面向对象的语言支持的概念包括:类与对象、继承、多态。举例来说,Ada就是一个典型的基于对象的语言,因为它不支持继承、多态,此外其他基于对象的语言还有Alphard、CLU、Euclid、Modula。面向对象的语言中一部分是新发明的语言,如Smalltalk、Java,这些语言本身往往吸取了其他语言的精华,而又尽量剔除他们的不足,因此面向对象的特征特别明显,充满了蓬勃的生机;另外一些则是对现有的语言进行改造,增加面向对象的特征演化而来的。
文章评论