-
深入对象与类的关系理论篇(序列化与类的关系)
2019-12-27 21:45:46深入对象与类的关系理论篇(序列化与类的关系)最近在一本书上,偶尔看到了对象与序列化的一个转换,然后和PHP的朋友商讨,什么是序列化,发现很多人不知道序列化是什么,什么时候用序列化?甚至有些用PHP的网友连对象...深入对象与类的关系理论篇(序列化与类的关系)
最近在一本书上,偶尔看到了对象与序列化的一个转换,然后和PHP的朋友商讨,什么是序列化,发现很多人不知道序列化是什么,什么时候用序列化?甚至有些用PHP的网友连对象都有点搞不灵清。所以就萌生了写一篇类似专题的文章来分享一下自己的知识。
什么是面向对象?
面向对象与具体的语言无关。类是具体抽象的组织,对象是类具体的存在。 类实例化出来对象,换句话说,就是类是一个模子,我们把泥浆倒进模子里面(实例化)就成了一个对象。
什么是对象的“形”与“本” ?
要回答类与对象的本质的这个问题,我们可以先对象的“形”来讲起。
类是我们对一组对象的描述。
class Person { public $name; public $gender; public function say() { echo $this->name . 'is' . $this->gender; } } 这里就是一个类的型,它具有两个属性,一个姓名,一个性别,有一个开口说话的方法。 我们接下来可以产生这个类的实例 person类实例化出两个对象,一个小明,一个小红 $xiaoming = new Person(); $xiaoming->gender = 'boy'; $xiaoming->name = 'xiaoming'; $xiaoming->say(); $xiaohong = new Person(); $xiaohong->name = 'xiaohong'; $xiaohong->gender = 'female'; $xiaohong->say();
类定义了一系列的属性和方法,并提供了实际的操作的细节,这些方法可以对属性进行加工,比如在上面的两个对象中,小明一个say()方法对gender和name属性进行了加工,并且echo 输入了。
类与对象的关系是一种“服务”与“被服务”的关系。类是属性和方法的集合,也就是说类是属性和方法的组成
序列化
我们var_dump 一下上面实例化出来的 $xiaoming, $xiaohong
发现分别得出用有类似有键值对的数组
到了这里,我们可以很清楚的认识到,对象其实就是一堆数据,既然如此,那么我们就可以把这堆数据存储起来,以便于使用,这就是序列化
所谓序列化,就是把保存在内存当中的各种对象的属性保存起来,并且在用的时候还原。下面我们来尝试一下。
class Person { public $name; public $gender; public function say() { echo $this->name . 'is' . $this->gender; } } $xiaoming = new Person(); $xiaoming->gender = 'boy'; $xiaoming->name = 'xiaoming'; $xiaoming->say(); $str = serialize($xiaoming); file_put_contents('./aaa.txt',$str );
我们可以打开aaa.txt 看到
O:6:"Person":2:{s:4:"name";s:8:"xiaoming";s:6:"gender";s:3:"boy";}
在需要的时候,我们反序列化取出这个对象
class Person { public $name; public $gender; public function say() { echo $this->name . 'is' . $this->gender; } } $str = file_get_contents('./aaa.txt'); $xiaoming = unserialize($str); $xiaoming->say();
我们可以继续使用这个对象。
注意:在序列化与反序列化中,我们都需要包含类和对象的定义,不然出现在反序列化中,找不到该类的定义,而找不到里面的方法,获取不到正确的结果
由同一个类生成不同的对象,拥有各自不同的属性,但共享了空间中方法区域的代码,也就是共享了我们这个class类
对象与数组的关系
对象是什么,我们不好理解,但是数组是什么,我们好理解。数组的概念比较简单。下面我们用对象与数组的对比,来帮助我们理解,序列化
$xiaoming = array('name'=>'xiaoming','gender'=>'female'); echo serialize($xiaoming);
结果
a:2:{s:4:“name”;s:8:“xiaoming”;s:6:“gender”;s:6:“female”;}结论
可以清楚的看出,对象和数组的序列化得出来的效果一模一样,但是在对象中有个指针,值香他所属的类。在上面序列化的Person这几个字符,就标识了这个对象属于这个Person 这个类,所以可以执行该方法。而数组就不能。不信你自己尝试。
结尾
对象就是数据,对象本身是不包过方法,对象有个指针所指向类,这个再去使用该类中的方法。
类和对象是不可以分割,实例化对象后,对象指针所值向类,如果找不到该类就会得不到想要的结果。
-
Java面向对象--类与对象的关系、创建初始化对象
2020-12-09 21:36:58类与对象的关系 类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物。例如:Person类、Pet类、Car类等,这些类都是用来描述/定义某一类具体的事物应该具备的特点和行为。 ...类与对象的关系
- 类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物。例如:Person类、Pet类、Car类等,这些类都是用来描述/定义某一类具体的事物应该具备的特点和行为。
- 对象是抽象概念的具体实例:能够体现出特点,展现出功能,是具体的实例,而不是一个抽象的概念。例如:张三就是人这个类的实例,是一个有特点的人。
创建与初始化对象
-
使用new关键字创建对象!!!
-
使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。
-
类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。
-
构造器必须要掌握!!!
-
实例:
//定义学生类 public class Student { //属性:字段 String name;//null int age;//0 //方法 public void study(){ System.out.println(this.name+"正在学习"); } }
public class Demo03 { //一般一个项目应该只存一个main方法 public static void main(String[] args) { //类:抽象的,实例化 //类在实例化之后会返回一个自己的对象 //student对象就是一个Student类的具体实例!!! Student student = new Student(); Student xm = new Student(); Student xh = new Student(); xm.name="小明"; xm.age=1; System.out.println(xm.name); System.out.println(xm.age); //没有赋值时 System.out.println(xh.name); System.out.println(xh.age); } }
运行结果:
-
JAVA学习20-面向对象类与对象的关系,创建与初始化对象
2020-08-16 16:20:37类与对象的关系 ◆类是一种抽象的数据类型,它是对某一 类物整体描述/定义,但是并不能代表某一 个具体的物.◆动物、植物、手机、电脑.... ◆Person类、Pet类、 Car类等, 这些类都是用来描述/定义某一类具体的事物...类与对象的关系
◆类是一种抽象的数据类型,它是对某一 类物整体描述/定义,但是并不能代表某一 个具体的物.◆动物、植物、手机、电脑.... ◆Person类、Pet类、 Car类等, 这些类都是用来描述/定义某一类具体的事物应该具备的特点和行为 对象是抽象概念的具体实例 ◆张三就是人的一个具体实例,张三家里的旺财就是狗的-个具体实例。◆能够体现出特点展现出功能的是具体的实例,而不是一一个抽象的概念 我们可以将这些思想转换为代码实现。
创建与初始化对象
◆使用new关键字创建对象 ◆使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。 ◆类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下俩个特点: ◆1.必须和类的名字相同 ◆2. 必须没有返回类型,也不能写void
public class Student { //类是抽象的 //类的属性 String name; int age; String sex; //方法 public void study(){ System.out.println("学生们在学习"); } } //测试 public class Application { public static void main(String[] args) { //类是抽象的,要new一个实例化对象 //实例化对象返回一个自己的具体对象 Student zhangsan=new Student(); zhangsan.name="张三"; zhangsan.age=16; zhangsan.sex="男"; System.out.println(zhangsan.name); System.out.println(zhangsan.age); System.out.println(zhangsan.sex); zhangsan.study(); Student lisi=new Student(); lisi.name="李四"; lisi.age=55; lisi.sex="女"; System.out.println(lisi.name); System.out.println(lisi.age); System.out.println(lisi.sex); } } 测试结果: 张三 16 男 学生们在学习 李四 55 女 Process finished with exit code 0
-
[技术讨论]如何实际理解对象的实例化和环境之间的关系
2011-05-14 16:54:00同样可以类比到社会与人之间的关系上,有人曾说,不能改造社会,就要适应社会。适应社会是你改造社会的基础。做软件也是如此,先了解用户的需求,实现需求的电子化的过程中就逐渐改变了用户需求的表现形式,用户的...环境和对象之间有着相互作用,一般情况下只是在于环境强一些,对象弱一些。同样可以类比到社会与人之间的关系上,有人曾说,不能改造社会,就要适应社会。适应社会是你改造社会的基础。
我们做软件也是如此,先了解用户的需求,实现需求的电子化的过程中就逐渐改变了用户需求的表现形式,用户的一些需求也就被我们改变了。
注:
这里的对话内容同样影射覆盖了软件开发与用户业务之间的交互影响过程,阐述了软件变迁和对用户业务的业务整合乃至业务重组的全部影响,具体能看到多少就要看各人的经验了。
卡恩 2011-5-12 22:53:45
对象的特性之一是对象都是可抽象的。即 对象有很多个不同的方面。对象参与到一个场景时会展现出某一个方面,总可以将对象的某一个方面抽象出来,让其作为对象的一个代表来参与场景交互。
卡恩 2011-5-12 22:53:52
青润老师怎么理解这话呢
青润 22:58:19
这句话说的就是一个事实,没有什么理解的,本身就是它的理解。
卡恩 22:58:30
总可以将对象的某一个方面抽象出来,让其作为对象的一个代表来参与场景交互。
卡恩 22:58:32
觉得是这句
青润 22:59:08
这句话是 aosd 的资料中看到的么?
卡恩 22:59:21
aosd ?
卡恩 22:59:36
比如一个系统 人参与的,人的参与场景的所有动作 可以代替 人这个对象。而不用描述 一个整个人的多方面的东西
卡恩 22:59:40
可以这么理解这句话吗
青润 23:00:22
这句话这样说吧。
你在你父亲面前,你的表现是儿子,你在你女朋友面前你表现的是男朋友。
如果你把这两个搞错了,你必然死得很惨。
卡恩 23:02:04
所以在和女朋友一起的时候,可以把自己作为男朋友这方面抽象出来,作为自己与女朋友交互 ?
青润 23:03:03
看来你还是不懂得什么是对象。
卡恩 23:03:25
额。。 我还以为理解对了,
青润 23:03:27
你,就是一个人,抽象的人。
具体化到你这个个体的时候,也有很多个方面。
青润 23:03:53
刚才我举的例子,就是两个场景下的两个方面,这就是对象。
青润 23:04:03
或者说对象的实例化。
卡恩 23:04:53
这个我知道,你的意思是从对象参与的不同场景去去分析和理解对象
青润 23:08:33
你这么说,也可以。
你这样理解就是环境促使对象具体化。
而实际上应该是两者的互相影响,比如:
你如果只是把你女朋友当作普通朋友看待,那结果,你就不可能用男朋友这种方式来和她相处,而即使她认为你就是她男朋友,也会因为这个而逐渐发生变化。
也就是说,环境和对象之间有着相互作用,一般情况下只是在于环境强一些,对象弱一些。同样可以类比到社会与人之间的关系上,有人曾说,不能改造社会,就要适应社会。适应社会是你改造社会的基础。
我们做软件也是如此,先了解用户的需求,实现需求的电子化的过程中就逐渐改变了用户需求的表现形式,用户的一些需求也就被我们改变了。
这样说,明白了么?
卡恩 23:10:57
,好有哲理 ~
青润 23:12:54
如果你都理解了,那你就的确明白了什么是对象,刚才那句话应该一看就懂的,因为它没有什么内涵的东西,说的就是一个大白话,只不过不是例子。
-
对象与对象之间的关系
2016-12-10 12:03:50依赖关系指的是类之间的访问关系,如果类A需要访问类B的方法,或者类A负责实例化类B,就可以说类A依赖于类B。 3、聚集关系 聚集指的是整体与部分之间的关系,例如:人与手就是聚集关系。 -
面向对象:静态 非静态 实参 形参 值传递 类与对象的关系 创建初始化对象 构造器的调用 有参构造
2021-03-01 11:00:04面向对象的本质就是:以类的方式组织代码,以对象的组织(封装)数据。 抽象 (抽象就是抽取像的一部分给抽出来变成类) 三大特性: 封装 把数据包装起来 继承 子类 继承父类 子继承父所有东西 多态 同一个事物有... -
类与对象的关系
2021-02-27 20:52:37类与对象的关系 类是一种抽象的数据类型,他是对某一类事物的描述、定义,但是不能代替某一个具体事物 例如:动物、职务、手机等 Person类、Pet类、Car类等,这些类都是用来描述、定义某一类具体事务应该具备的特点... -
类和对象的关系
2010-11-22 10:39:00对象与类的关系是: 对象的共性抽象为类,类的实例化就是对象。 类是一个抽象的概念,而对象是具体的,比如说车是一个类的话,张三的那辆奔驰车就是车这个类的一个实例,动物是一个类的话,李四的家养的那... -
基础概念中类,对象,实例,实例化,引用类型之间的关系
2020-09-24 13:12:35开学两三周了,第一次接触面向对象的开发语言,很多基础概念都懵懵懂懂的,静下心来翻阅了相关资料,终于从中窥探出了一丝精华,现记录下来,即见证自己的成长,也帮助那些同我一样懵逼的同学们,理解何为面向对象。... -
面向对象-类与对象之间的关系
2019-01-23 00:07:53以下内容是我对类以及对象的一部分理解: ...我将简单阐述对于类和对象之间的一系列关系,为了可以使更多对编程并不了解的人来认识什么是类,什么又是对象,以及对于创建一个对象的过程中所产生的引用,实例等名词的... -
对象的创建和初始化
2020-12-26 12:28:05文章目录前言一、类和对象的关系二、如何创建和初始化对象1.使用new关键字创建对象2.对象初始化三、构造器 前言 本文主要讲解类和对象的关系,以及如何创建和初始化对象,对构造器的详解 一、类和对象的关系 类... -
Java - 类和对象的理解与关系
2020-08-04 18:32:35类和对象的理解与关系 类是对一类事物的描述,是抽象概念的定义 = 抽象概念的人 对象是实际存在的该类事物的每个个体 = 实实在在的人 两者关系 对象是对类的实例化(new),由类派生出来的。 更模糊的讲,就是对... -
面向对象---prototype、__proto__、实例化对象三者之间的关系
2019-09-26 13:57:49解释:通过关键字new 创建的函数叫做构造函数 作用:用来创建一个对象 废话少说直接上代码,首先我们还是创建一个构造函数人类 然后我们在创建两个实例,一个凡尘 一个吴彦祖!毕竟只有我们2个人的颜值可以... -
java实例化一个对象的过程_转:java实例化对象的过程
2021-02-26 14:22:11对于初学JAVA的人总搞清楚对象是如何实例化的,假如类之间存在继承关系,那就更糊涂了。下面我们通过两个例题来说明对象的实例化过程。编译并运行该程序会有以下输出StaticBlockEmployeeCompany:chinasoftNon-... -
【面向对象】【prototype&&__proto__&&实例化对象三者之间的关系】
2019-09-21 23:15:48作用:用来创建一个对象 废话少说直接上代码,首先我们还是创建一个构造函数人类 然后我们在创建两个实例,一个凡尘 一个吴彦祖!毕竟只有我们2个人的颜值可以进行匹配 我们可以看到凡尘和彦祖都... -
Java的类与对象的关系
2009-11-16 11:06:54类与对象的关系 1、类,说白了就是一种模板,一种共性的产物。对象,是模板的实例化,是个性的产物,是一个具体的个体。 2、类必须通过对象才能使用,而对象中的属性和行为都必须在类中定义。 3、类由属性和行为... -
java实例化对象的过程
2018-01-29 09:24:58对于初学JAVA的人总搞清楚对象是如何实例化的,假如类之间存在继承关系,那就更糊涂了。下面我们通过两个例题来说明对象的实例化过程。 编译并运行该程序会有以下输出 Static Block ... -
【Java】面向对象思想以及类与对象的关系
2016-03-07 23:23:21一、面向对象概念 面向对象是Java的基本特征,深刻的理解面向对象的思想是设计良好的Java软件项目的前提...2、可以将复杂的事情简单化(吃烤鸭的例子:如果我们用面向对象的方法,就不必一步一步的想制作的过程,直接找 -
java基础入门-类、对象、实例的关系
2015-04-22 08:34:42instance:具象对象的过程,比如:填充“人”这个类里面的属性域,最后形成“bill”这个人的过程,重点是过程,所以平常也叫实例化 但是我个人更加倾向于第二个图 class,说白了就是类型,就像上面说的“人”
-
免费的图像和照片处理软件 Paint NET 4.2.15 中文多语免费版.zip
-
Unity RUST 逆向安全开发
-
FFmpeg4.3系列之16:WebRTC之小白入门与视频聊天的实战
-
practical java_Practical Java (一)关于reference
-
HyPlayer:第三方网易云音乐播放器| 网易云音乐播放器-源码
-
java几何体类_java中Graphics2D的几何图形类有哪些?实例展示
-
开源 3D 动画建模渲染软件 Blender 2.91.2 x64 中文多语免费版.zip
-
preg_replace在java中_Java相当于PHP的preg_replace_callback
-
MySQL 多平台多模式(安装、配置和连接 详解)
-
华为1+X认证——网络系统建设与运维(初级)
-
MySQL 性能优化(思路拓展及实操)
-
power指令集 mysql_PowerPC 体系结构之指令集(转)
-
userDB:用户数据库-源码
-
priority queue java_Java中的PriorityQueue add() 方法 - Break易站
-
MySQL 索引
-
predicate java_Java函数式编程之Predicate 过滤操作
-
用Go语言来写区块链(一)
-
MySQL 存储过程(创建海量数据实验环境)
-
深入了解php底层机制
-
bigdata-demo-master.rar